package com.jvm.classloader;

/**
 * 删除classpath下的MyCat类，那么从自定义类加载器一直委托给双亲类加载器进行尝试加载MySample类，结果是应用类加载器能够加载，
 * 加载之后发现还应该加载MySample类中的MyCat类，但是classpath下又没有，这里并不能再交给自定义类加载器了，因为当前最底层加载
 * 器就是应用类加载器。但如果只删除MySample类，则最终是自定义类加载器加载MySample类并尝试从双亲加载MyCat类。
 */
public class MyTest17_1 {
    public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException {

        MyTest16 loader1 = new MyTest16("loader1");
        loader1.setPath("C:\\Users\\John\\Desktop\\");

        Class<?> clazz = loader1.loadClass("com.jvm.classloader.MySample");

        System.out.println("class: " + clazz.hashCode());
        Object obj = clazz.newInstance();//如果注释掉该行，那么就并不会实例化MySample对象，即MySample构造方法不会被调用，因此不会实例化MyCat对象，即没有对MyCat对象进行主动使用，这里就不会加载MyCat class
    }
}
